[小ネタ]Amazon Linux 2 で CloudWatch エージェントを起動しようとしてハマった話
コンサル部@大阪オフィスのYui(@MayForBlue)です。
Amazon Linux 2 に CloudWatch エージェントをインストールして起動しようとした際にエラーが出てハマってしまいました。
小ネタですが備忘録として解決方法を残しておきたいと思います。
起きたこと
EC2 に CloudWatch エージェントをインストールして SSM から Run Command を使用してエージェントを起動しようとした際に、エラーが出て実行が失敗してしまいました。
エラーの内容は以下です。
/opt/aws/amazon-cloudwatch-agent/bin/config-downloader --output-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --download-source ssm:AmazonCloudWatch-linux --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default Region: ap-northeast-1 credsConfig: map[] Successfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ssm_AmazonCloudWatch-linux.tmp Start configuration validation... /opt/aws/amazon-cloudwatch-agent/bin/config-translator --input /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json --input-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --output /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default Valid Json input schema. I! Detecting runasuser... No csm configuration found. Configuration validation first phase succeeded /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -schematest -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml Configuration validation second phase failed ======== Error Log ======== 2020/08/06 06:20:57 I! AmazonCloudWatchAgent Version 1.246396.0. 2020/08/06 06:20:57 E! Error parsing /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml, open /usr/share/collectd/types.db: no such file or directory ----------ERROR------- 2020/08/06 06:20:57 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ssm_AmazonCloudWatch-linux.tmp ... failed to run commands: exit status 1
結論と解決策
結論を言うと、OSに collectd (サーバの統計情報を収集するためのソフトウェア) のアプリケーションが足りていないことが原因でした。
Amazon Linux 2 にはデフォルトで collectd がインストールされていないにも関わらず、エージェントの設定ファイルを作成した際に collectd のメトリクスを有効にしていたため、上記のエラーが発生しました。
実際に使用した設定ファイルの内容は以下です。
{ "agent": { "metrics_collection_interval": 60, "run_as_user": "root" }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/messages", "log_group_name": "messages", "log_stream_name": "{instance_id}" } ] } } }, "metrics": { "append_dimensions": { "AutoScalingGroupName": "${aws:AutoScalingGroupName}", "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}" }, "metrics_collected": { "collectd": { "metrics_aggregation_interval": 60 }, "disk": { "measurement": [ "used_percent" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "mem": { "measurement": [ "mem_used_percent" ], "metrics_collection_interval": 60 }, "statsd": { "metrics_aggregation_interval": 60, "metrics_collection_interval": 10, "service_address": ":8125" } } } }
解決策として、以下のドキュメントにしたがって collectd をインストールしました。
collectd を使用したカスタムメトリクスの取得
インストールのコマンドは以下です。
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm sudo yum install -y collectd
インストールが終わったあと再度SSMの Run Command を実行すると無事にエージェントが起動し、CloudWatch Logs にログが出力されていることが確認できました。
また、collectd からのメトリクスの収集が不要な場合は、collectd の使用をしないようにエージェントの設定ファイルを再度作成してコマンドを実行するとエージェントの起動が成功します。
さいごに
小ネタですが、少しハマったので備忘録として書いてみました。
この記事がどなたかのお役に立てば幸いです。
以上、コンサル部@大阪オフィスのYui(@MayForBlue)でした!